package com.clps.algorithm.chapter11.狒狒吃香蕉;

/**
 * 狒狒很喜欢吃香蕉。一天它发现了n堆香蕉，第i堆有piles[i]个香蕉。门卫刚好走开了要H小时后才会回来。
 * 狒狒吃香蕉喜欢细嚼慢咽，但又想在门卫回来之前吃完所有的香蕉。
 * 请问狒狒每小时至少吃多少根香蕉？如果狒狒决定每小时吃k根香蕉，
 * 而它在吃的某一堆剩余的香蕉的数目少于k，那么它只会将这一堆的香蕉吃完，
 * 下一个小时才会开始吃另一堆的香蕉。
 */
public class demo01 {
    public static void main(String[] args) {

    }

    public  int minEatingSpeed(int[] pules,int H){
        int max = Integer.MIN_VALUE;
        for (int pile : pules) {
            max = Math.max(max,pile);
        }


        int left = 1;
        int right = max;
        while (left <=right){
            int mid = left +(right-left)/2;
            int hours = getHours(pules,mid);
            if(hours <=H){
                if(mid == 1 || getHours(pules,mid-1)>H){
                    return  mid;
                }

                right = mid +1;
            }else{
                left = mid +1;
            }
        }
        return  -1;
    }
    private int getHours(int[] piles, int mid) {
        int hours = 0;
        for (int pile : piles) {
            hours+=(pile+mid-1)/mid;
        }
        return  hours;
    }
}
